﻿<%@ WebHandler Language="C#" Class="CustomerList" %>

using System;
using System.Web;
using Chenxin.Lib.Utility;
using System.Data;
using System.Text;
using System.Data.SqlClient;

public class CustomerList : AjaxHandlerBase
{
    override public void RequestProcess(HttpContext context)
    {
        context.Response.AddHeader("pragma", "no-cache");
        context.Response.AddHeader("cache-control", "");
        context.Response.CacheControl = "no-cache";
        
        if (!string.IsNullOrEmpty(context.Request.Params["op"]))
        {
            //处理类型
            string strOperate = context.Request.Params["op"];

            switch (strOperate.Trim())
            {
                case "Search":
                    Get(context);
                    break;
                case "gethousetracelist":
                    GetHouseTraceList(context);
                    break;
                default:
                    break;
            }
        }
    }

    public void Get(HttpContext context)
    {
       string searchObj = context.Request.Params["SearchObj"];
       if("20".Equals(searchObj)) {
           SearchRecoder(context);
       } else {
           SearchCustomer(context);
       }
   }
    public void GetCustomer(HttpContext context, string strWhere)
    {
        try
        {
            int count = 0;
            Constants.Pagination stuPg = new Constants.Pagination();

            //页码
            int strPageIndex = (string.IsNullOrEmpty(context.Request["pageindex"])) ? 1 : int.Parse(context.Request["pageindex"]) + 1;//页码
            //页显示行数
            int strPageSize = (string.IsNullOrEmpty(context.Request["pagesize"])) ? 30 : int.Parse(context.Request["pagesize"]);//页记录数
            //排序
            string strOrderField = "House_ViewOwerInfo.Addtime desc";
 
            //欲选择字段列表 
            string FieldList = "RecordId,HouseId,HouseCode,HouseAddress,ViewEmployeeId,Employee,ViewDepartId,Depart,Status,Addtime ";
            //子查询欲选择字段列表
            string TableFieldList = "RecordId,HouseId,HouseCode,HouseAddress,ViewEmployeeId,Employee,ViewDepartId,Depart,case Status when '0' then '业主' else  '客户' end as Status,Addtime";

            //所要查询的表名
            string TableName = "House_ViewOwerInfo";
            //根据sql执行查询
            DataSet ds = Chenxin.Lib.House.DAL.House_ViewOwerInfo.GetList(strPageSize, strPageIndex, strOrderField, TableName, strWhere, FieldList, TableFieldList, true);
            //数据量
            count = (int)ds.Tables[1].Rows[0][0];

            string strHtml = string.Empty;

            if (!GetCustomerListHtml(ds, out strHtml))
            {
                context.Response.Write(retExecResult(Constants.ExecResult.Error, "生成HTML错误", ""));
            }
            stuPg.count = count;
            stuPg.data = strHtml.ToString();

            context.Response.Write(retExecResult(Constants.ExecResult.Succ, "OK", stuPg));

        }
        catch (Exception ex)
        {
            context.Response.Write(retExecResult(Constants.ExecResult.Error, ex.Message, ""));
        }
    }
    public void GetRecoder(HttpContext context, string strWhere)
    {
        try
        {
            int count = 0;
            Constants.Pagination stuPg = new Constants.Pagination();

            //页码
            int strPageIndex = (string.IsNullOrEmpty(context.Request["pageindex"])) ? 1 : int.Parse(context.Request["pageindex"]) + 1;//页码
            //页显示行数
            int strPageSize = (string.IsNullOrEmpty(context.Request["pagesize"])) ? 30 : int.Parse(context.Request["pagesize"]);//页记录数
            //排序
            string strOrderField = "A.Addtime desc";

            //欲选择字段列表 
            string FieldList = "RecordId,HouseId,HouseCode,HouseAddress,ViewEmployeeId,Employee,ViewDepartId,Depart,Status,Addtime ";
            //子查询欲选择字段列表
            string TableFieldList = "A.RecordId,A.HouseId,A.HouseCode,A.HouseAddress,A.ViewEmployeeId,A.Employee,A.ViewDepartId,A.Depart,case A.Status when '0' then '业主' else  '客户' end as Status,A.Addtime";

            //所要查询的表名
            string TableName = "House_ViewOwerInfo A left join House_BaseInfo B on A.HouseId = B.HouseId left join Customer_BaseInfo C on  A.HouseId =C.CustomerId ";
            //根据sql执行查询
            DataSet ds = Chenxin.Lib.House.DAL.House_ViewOwerInfo.GetList(strPageSize, strPageIndex, strOrderField, TableName, strWhere, FieldList, TableFieldList, true);
            //数据量
            count = (int)ds.Tables[1].Rows[0][0];

            string strHtml = string.Empty;

            if (!GetCustomerListHtml(ds, out strHtml))
            {
                context.Response.Write(retExecResult(Constants.ExecResult.Error, "生成HTML错误", ""));
            }
            stuPg.count = count;
            stuPg.data = strHtml.ToString();

            context.Response.Write(retExecResult(Constants.ExecResult.Succ, "OK", stuPg));

        }
        catch (Exception ex)
        {
            context.Response.Write(retExecResult(Constants.ExecResult.Error, ex.Message, ""));
        }
    }
    private bool GetCustomerListHtml(DataSet dslist, out string strHtml)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("<table width=\"100%\" cellspacing=\"1\" class=\"tabsorternew\" id=\"report\">");
        sb.Append("<thead>");
        sb.Append("<tr>");
        sb.Append("<th width=\"10%\">查询人</th>");
        sb.Append("<th width=\"15%\">所在门店</th>");
        sb.Append("<th width=\"15%\">查询时间</th>");
        sb.Append("<th width=\"8%\">查看对象</th>");
        sb.Append("<th width=\"25%\">房源/客户编号</th>");
        sb.Append("<th width=\"35%\">房源地址/客户姓名</th>");
        sb.Append("</tr>");
        sb.Append("</thead>");
        sb.Append("<tbody>");
        int i = 0;
        foreach (DataRow row in dslist.Tables[0].Rows)
        {
            if (i % 2 == 0)
                sb.AppendFormat("<tr id=\"{0}\" class=\"tr_houselist\">", row["RecordId"].ToString() + "," + row["HouseId"].ToString());
            else
                sb.AppendFormat("<tr id=\"{0}\"  class=\"tr_houselist bluebgcolor\">", row["RecordId"].ToString() + "," + row["HouseId"].ToString());
            
            sb.AppendFormat("<td>{0}</td>", Chenxin.Lib.Utility.DatasetHelper.GetValue(row, "Employee", ""));
            sb.AppendFormat("<td>{0}</td>", Chenxin.Lib.Utility.DatasetHelper.GetValue(row, "Depart", ""));
            sb.AppendFormat("<td>{0:yyyy-mm-dd hh-mm-ss}</td>", Chenxin.Lib.Utility.DatasetHelper.GetValue(row, "Addtime", ""));
            sb.AppendFormat("<td>{0}</td>", Chenxin.Lib.Utility.DatasetHelper.GetValue(row, "Status", ""));
            sb.AppendFormat("<td>{0}</td>", Chenxin.Lib.Utility.DatasetHelper.GetValue(row, "HouseCode", ""));
            sb.AppendFormat("<td>{0}</td>", Chenxin.Lib.Utility.DatasetHelper.GetValue(row, "HouseAddress", ""));
            sb.Append("</tr>");
            i++;
        }

        sb.Append("</tbody></table>");

        strHtml = sb.ToString();
        return true;
    }


    public void SearchRecoder(HttpContext context)
    {
        Guid city = (string.IsNullOrEmpty(context.Request["cityid"])) ? Guid.Empty : new Guid(context.Request["cityid"]);
        Guid company = (string.IsNullOrEmpty(context.Request["companyid"])) ? Guid.Empty : new Guid(context.Request["companyid"]);
        Guid businessdistrict = (string.IsNullOrEmpty(context.Request["areaid"])) ? Guid.Empty : new Guid(context.Request["areaid"]);
        Guid departs = (string.IsNullOrEmpty(context.Request["departid"])) ? Guid.Empty : new Guid(context.Request["departid"]);
        Guid employee = (string.IsNullOrEmpty(context.Request["userid"])) ? Guid.Empty : new Guid(context.Request["userid"]);

        //判断权限范围/////////////////////////////////////////////
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        if (employee != Guid.Empty)
            sb.AppendFormat(" AND (B.OprPersonId = '{0}' OR C.OprPersonId='{0}') ", employee);
        else if (departs != Guid.Empty)
            sb.AppendFormat(" AND (B.OprDepartId = '{0}' OR C.OprDepartId='{0}')", departs);
        else if (businessdistrict != Guid.Empty)
        {
            Chenxin.Lib.Hr.Entity.Hr_DepartmentInfo item = null;
            string strCachkey = string.Format(Chenxin.Lib.Cache.CacheDataType.GLOBAL_DEPARTMENT, businessdistrict);
            Chenxin.Lib.Cache.CacheService cs = new Chenxin.Lib.Cache.CacheService(Chenxin.Lib.Cache.CacheConn.xCacheConn.GLOBAL);
            item = cs.GetObject<Chenxin.Lib.Hr.Entity.Hr_DepartmentInfo>(strCachkey);
            if (!cs.Hit)
            {
                item = Chenxin.Lib.Hr.DAL.Hr_DepartmentInfo.GetModel(businessdistrict);
                if (item != null) cs.Set(strCachkey, item, DateTime.Now.AddDays(1));
            }

            if (item == null)
            {
                context.Response.Write(string.Format("{{success:'0',msg:'{0}',data:''}}", "获取商圈或分类数据丢失"));
                return;
            }
            sb.AppendFormat(" AND (B.OprDepartId in (Select DepartId from v_Hr_DepartmentInfo where DepartSrc like '{0}%') OR C.OprDepartId in (Select DepartId from v_Hr_DepartmentInfo where DepartSrc like '{0}%'))", item.DepartSrc);
        }
        else if (company != Guid.Empty)
            sb.AppendFormat(" AND (B.OprDepartId in (Select DepartId from v_Hr_DepartmentInfo where CompanyId = '{0}') OR C.OprDepartId in (Select DepartId from v_Hr_DepartmentInfo where CompanyId = '{0}'))", company);
        else if (city != Guid.Empty)
            sb.AppendFormat(" AND (B.OprDepartId in (Select DepartId from v_Hr_DepartmentInfo where CityId = '{0}') OR C.OprDepartId in (Select DepartId from v_Hr_DepartmentInfo where CityId = '{0}'))", city);
        else
            sb.AppendFormat(" AND (B.OprDepartId in (Select DepartId from v_Hr_DepartmentInfo where CompanyId = '{0}') OR  C.OprDepartId  in (Select DepartId from v_Hr_DepartmentInfo where CompanyId = '{0}'))", CurrentUserInfo.CompanyId);

        System.Text.StringBuilder sb1 = new System.Text.StringBuilder();
        //查看所有电话日志权限
        if (CurrentUserInfo.ContainsPermit(Constants.Permit_ViewAllTelLog))
        {
            sb1.Append(" (1=1) ");
        }
        //查看城市电话日志权限
        else if (CurrentUserInfo.ContainsPermit(Constants.Permit_ViewCityTelLog))
        {
            sb1.Append("EXISTS(");
            sb1.Append("Select 1 from v_Hr_User_BaseInfo M ");
            sb1.AppendFormat("WHERE ((B.OprPersonId  = M.Userid OR C.OprPersonId  = M.Userid) AND  M.CityId= '{0}') ", CurrentUserInfo.CityId);
            sb1.Append(")");
        }
        //查看公司电话日志权限
        else if (CurrentUserInfo.ContainsPermit(Constants.Permit_ViewCompanyTelLog))
        {
            sb1.Append("EXISTS(");
            sb1.Append("Select 1 from v_Hr_User_BaseInfo M ");
            sb1.AppendFormat("WHERE ((B.OprPersonId  = M.Userid OR C.OprPersonId  = M.Userid) AND  M.CompanyId= '{0}') ", CurrentUserInfo.CompanyId);
            sb1.Append(")");
        }
        //查看部门电话日志权限
        else if (CurrentUserInfo.ContainsPermit(Constants.Permit_ViewDepartTelLog))
        {
            sb1.Append("EXISTS(");
            sb1.Append("Select 1 from v_Struct_UserDepartRelation M ");
            sb1.AppendFormat("WHERE ((B.OprDepartId = M.Departid OR C.OprDepartId = M.Departid) AND  M.Userid= '{0}' AND  M.ViewTelLog= 1) ", CurrentUserInfo.UserId);
            sb1.Append(")");
        }
        else
        {
            sb1.Append("EXISTS(");
            sb1.Append("Select 1 from v_Struct_UserDepartRelation M ");
            sb1.AppendFormat("WHERE ((B.OprPersonId  = '{0}' OR C.OprPersonId  = '{0}') AND  M.ViewTelLog= 1) ", CurrentUserInfo.UserId);
            sb1.Append(")");
        }

        if (!String.IsNullOrEmpty(sb.ToString()))
            sb1.Append(sb.ToString());

        string starttime = context.Request.Params["starttime"];//查看时间
        string endtime = context.Request.Params["endtime"];//查看时间
        string housecode = context.Request.Params["HouseCode"];//房源编号
        string customerCode = context.Request.Params["CustomerCode"];
        if (!String.IsNullOrEmpty(starttime))
        {
            sb1.Append(string.Format(" and convert(varchar(10),(convert(datetime,A.Addtime,120)),120) >= '{0}'", starttime));
        }
        if (!String.IsNullOrEmpty(endtime))
        {
            sb1.Append(string.Format(" AND convert(varchar(10),(convert(datetime,A.Addtime,120)),120)  <= '{0}'", endtime));
        }
        if (!String.IsNullOrEmpty(housecode))
        {
            sb1.Append(" and A.HouseCode like '%" + housecode.Trim() + "%'");
        }
        if (!String.IsNullOrEmpty(customerCode))
        {
            sb1.AppendFormat(" and A.Status ={0}", customerCode);
        }
        //根据查询条件生成一个Table
        GetRecoder(context, sb1.ToString());
    }
    
    public void SearchCustomer(HttpContext context)
    {

        Guid city = (string.IsNullOrEmpty(context.Request["cityid"])) ? Guid.Empty : new Guid(context.Request["cityid"]);
        Guid company = (string.IsNullOrEmpty(context.Request["companyid"])) ? Guid.Empty : new Guid(context.Request["companyid"]);
        Guid businessdistrict = (string.IsNullOrEmpty(context.Request["areaid"])) ? Guid.Empty : new Guid(context.Request["areaid"]);
        Guid departs = (string.IsNullOrEmpty(context.Request["departid"])) ? Guid.Empty : new Guid(context.Request["departid"]);
        Guid employee = (string.IsNullOrEmpty(context.Request["userid"])) ? Guid.Empty : new Guid(context.Request["userid"]);

        //判断权限范围/////////////////////////////////////////////
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        if (employee != Guid.Empty)
            sb.AppendFormat(" AND (ViewEmployeeId = '{0}') ", employee);
        else if (departs != Guid.Empty)
            sb.AppendFormat(" AND (ViewDepartId = '{0}')", departs);
        else if (businessdistrict != Guid.Empty)
        {
            Chenxin.Lib.Hr.Entity.Hr_DepartmentInfo item = null;
            string strCachkey = string.Format(Chenxin.Lib.Cache.CacheDataType.GLOBAL_DEPARTMENT, businessdistrict);
            Chenxin.Lib.Cache.CacheService cs = new Chenxin.Lib.Cache.CacheService(Chenxin.Lib.Cache.CacheConn.xCacheConn.GLOBAL);
            item = cs.GetObject<Chenxin.Lib.Hr.Entity.Hr_DepartmentInfo>(strCachkey);
            if (!cs.Hit)
            {
                item = Chenxin.Lib.Hr.DAL.Hr_DepartmentInfo.GetModel(businessdistrict);
                if (item != null) cs.Set(strCachkey, item, DateTime.Now.AddDays(1));
            }

            if (item == null)
            {
                context.Response.Write(string.Format("{{success:'0',msg:'{0}',data:''}}", "获取商圈或分类数据丢失"));
                return;
            }
            sb.AppendFormat(" AND (ViewDepartId in (Select DepartId from v_Hr_DepartmentInfo where DepartSrc like '{0}%'))", item.DepartSrc);
        }
        else if (company != Guid.Empty)
            sb.AppendFormat(" AND (ViewDepartId in (Select DepartId from v_Hr_DepartmentInfo where CompanyId = '{0}'))", company);
        else if (city != Guid.Empty)
            sb.AppendFormat(" AND (ViewDepartId in (Select DepartId from v_Hr_DepartmentInfo where CityId = '{0}'))", city);
        else
            sb.AppendFormat(" AND (ViewDepartId in (Select DepartId from v_Hr_DepartmentInfo where CompanyId = '{0}'))", CurrentUserInfo.CompanyId);

        System.Text.StringBuilder sb1 = new System.Text.StringBuilder();
        //查看所有电话日志权限
        if (CurrentUserInfo.ContainsPermit(Constants.Permit_ViewAllTelLog))
        {
            sb1.Append(" (1=1) ");
        }
        //查看城市电话日志权限
        else if (CurrentUserInfo.ContainsPermit(Constants.Permit_ViewCityTelLog))
        {
            sb1.Append("EXISTS(");
            sb1.Append("Select 1 from v_Hr_User_BaseInfo M ");
            sb1.AppendFormat("WHERE (House_ViewOwerInfo.ViewEmployeeId = M.Userid AND  M.CityId= '{0}') ", CurrentUserInfo.CityId);
            sb1.Append(")");
        }
        //查看公司电话日志权限
        else if (CurrentUserInfo.ContainsPermit(Constants.Permit_ViewCompanyTelLog))
        {
            sb1.Append("EXISTS(");
            sb1.Append("Select 1 from v_Hr_User_BaseInfo M ");
            sb1.AppendFormat("WHERE (House_ViewOwerInfo.ViewEmployeeId = M.Userid AND  M.CompanyId= '{0}') ", CurrentUserInfo.CompanyId);
            sb1.Append(")");
        }
        //查看部门电话日志权限
        else if (CurrentUserInfo.ContainsPermit(Constants.Permit_ViewDepartTelLog))
        {
            sb1.Append("EXISTS(");
            sb1.Append("Select 1 from v_Struct_UserDepartRelation M ");
            sb1.AppendFormat("WHERE (House_ViewOwerInfo.ViewDepartId = M.Departid AND  M.Userid= '{0}'  AND M.ViewTelLog= 1) ", CurrentUserInfo.UserId);
            sb1.Append(")");
        }
        else
        {
            sb1.Append("EXISTS(");
            sb1.Append("Select 1 from v_Struct_UserDepartRelation M ");
            sb1.AppendFormat("WHERE (House_ViewOwerInfo.ViewEmployeeId = '{0}' AND  M.ViewTelLog= 1) ", CurrentUserInfo.UserId);
            sb1.Append(")");
            //sb1.AppendFormat(" ViewEmployeeId = '{0}'", CurrentUserInfo.UserId);
        }

        if (!String.IsNullOrEmpty(sb.ToString()))
            sb1.Append(sb.ToString());

        string starttime = context.Request.Params["starttime"];//查看时间
        string endtime = context.Request.Params["endtime"];//查看时间
        string housecode = context.Request.Params["HouseCode"];//房源编号
        string customerCode = context.Request.Params["CustomerCode"];
        if (!String.IsNullOrEmpty(starttime))
        {
            sb1.Append(string.Format(" and convert(varchar(10),(convert(datetime,Addtime,120)),120) >= '{0}'", starttime));
        }
        if (!String.IsNullOrEmpty(endtime))
        {
            sb1.Append(string.Format(" AND convert(varchar(10),(convert(datetime,Addtime,120)),120)  <= '{0}'", endtime));
        }
        if (!String.IsNullOrEmpty(housecode))
        {
            sb1.Append(" and HouseCode like '%" + housecode.Trim() + "%'");
        }
        if (!String.IsNullOrEmpty(customerCode))
        {
            sb1.AppendFormat(" and Status ={0}", customerCode);
        }
        //根据查询条件生成一个Table
        GetCustomer(context, sb1.ToString());
    }

    /// <summary>
    /// 根据参数中的房源ID查询房源跟单数据;
    /// 返回Json数据：{count:'30',data:'abc'}
    /// </summary>
    /// <param name="context"></param>
    private void GetHouseTraceList(HttpContext context)
    {
        Guid houseId = (string.IsNullOrEmpty(context.Request["houseid"])) ? Guid.Empty : new Guid(context.Request["houseid"]);
        string responseJson = "";
        try
        {
            if (houseId == Guid.Empty)
            {
                responseJson = string.Format("{{success:'0',msg:'{0}',data:''}}", "参数错误，标识丢失!");
                context.Response.Write(responseJson);
                return;
            }
            Chenxin.Lib.House.Entity.House_ViewOwerInfo  voi = Chenxin.Lib.House.DAL.House_ViewOwerInfo.GetModel(houseId);
            if (voi == null)
            {
                responseJson = string.Format("{{success:'0',msg:'{0}',data:''}}", "参数错误，房源标识丢失!");
                context.Response.Write(responseJson);
                return;
            }
            houseId = voi.HouseId;
            int iPageIndex = (string.IsNullOrEmpty(context.Request["pageindex"])) ? 1 : int.Parse(context.Request["pageindex"]) + 1;//页码
            int iPageSize = (string.IsNullOrEmpty(context.Request["pagesize"])) ? 30 : int.Parse(context.Request["pagesize"]);//页记录数
            string fieldlist = "*";
            string fieldtablelist = "*";
            string orderfield = "House_TraceInfo.TraceTime desc";
            string strwhere = string.Format("(houseId='{0}' AND IsHide = 0)", houseId);

            System.Data.DataSet dshousetracelist = null;
            if (iPageIndex == 1)
            {
                //分页第一页从缓存中读取
                Chenxin.Lib.Cache.CacheService cs = new Chenxin.Lib.Cache.CacheService(Chenxin.Lib.Cache.CacheConn.xCacheConn.HOUSE);
                string strCachKey = string.Format(Chenxin.Lib.Cache.CacheDataType.HOUSE_TRACE, houseId);

                dshousetracelist = cs.GetDataSet(strCachKey);
                if (!cs.Hit)
                {
                    //若未命中。从查询数据库中读取
                    dshousetracelist = Chenxin.Lib.House.DAL.House_TraceInfo.GetList(
                        iPageIndex, iPageSize, orderfield, "House_TraceInfo", strwhere, fieldlist, fieldtablelist, true);

                    cs.Set(strCachKey, dshousetracelist, DateTime.Now.AddMinutes(15));
                }
            }
            else
            {
                dshousetracelist = Chenxin.Lib.House.DAL.House_TraceInfo.GetList(
                iPageIndex, iPageSize, orderfield, "House_TraceInfo", strwhere, fieldlist, fieldtablelist, true);
            }

            int count = (int)dshousetracelist.Tables[1].Rows[0][0];

            string strHtml = "";
            if (!GetHouseTraceListHtml(dshousetracelist, out strHtml))
            {
                responseJson = string.Format("{{success:'0',msg:'{0}',data:''}}", "生成HTML错误");
            }

            dshousetracelist.Dispose();
            dshousetracelist = null;
            responseJson = string.Format("{{success:'1',msg:'{0}',data:{{count:'{1}',data:'{2}'}}}}", "成功", count, strHtml);
            context.Response.Write(responseJson);
        }
        catch (Exception ex)
        {
            responseJson = string.Format("{{success:'0',msg:'{0}',data:''}}", "未知错误：" + ex.Message);
            context.Response.Write(responseJson);
            return;
        }
    }
    /// <summary>
    /// 生成跟单列表
    /// </summary>
    /// <param name="dslist"></param>
    /// <param name="strHtml"></param>
    /// <returns></returns>
    private bool GetHouseTraceListHtml(System.Data.DataSet dslist, out string strHtml)
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        foreach (System.Data.DataRow row in dslist.Tables[0].Rows)
        {
            sb.AppendFormat("<div class=\"infos\" title=\"{0}\"> <span class=\"rb\" style=\"width:500px\">{0}</span><span class=\"rbpsn\" style=\"width:160px\">{1}</span><span class=\"rbtim\" style=\"width:80px\">{2:yyyy-MM-dd}</span> </div>",
                DatasetHelper.GetValue(row, "TraceContext", ""),
                DatasetHelper.GetValue(row, "Tractor", "-") + "/" + DatasetHelper.GetValue(row, "Depart", "-"),
                DatasetHelper.GetValue(row, "TraceTime", DateTime.Today));
        }

        strHtml = sb.ToString();
        return true;
    }
    
}